7.7 分组后的转换
分组转换不像分组聚合会将数据收拢,而是保持原来的数据结构,相当于对每组数据区域做转换设置 ,要完成这类数据处理,需要使用transfrom()函数,结构如下:
transfrom(func,*args,**kwargs)
func :执行转换的函数
*args :传递给func的位置参数
**kwargs :传递给func的关键字参数
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.7.07 分组后的转换.xlsx" )
print (df)
df1=df.groupby( "组别" ).transform(sum)
print (df1)
返回:
成员 | 语文 | 数学 | |
---|---|---|---|
0 | 张三李四 | 113 | 31 |
1 | 张三李四 | 113 | 31 |
2 | 王麻子许流子 | 104 | 46 |
3 | 王麻子许流子 | 104 | 46 |
4 | 郭鬼子小曾韦大宝 | 153 | 131 |
5 | 郭鬼子小曾韦大宝 | 153 | 131 |
6 | 郭鬼子小曾韦大宝 | 153 | 131 |
自定义函数转换方式,除了内置函数,用用户也可在自定义函数来做转换处理,比如统计出每个人的分数占所有组所在科目的百分比。
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.7.07 分组后的转换.xlsx" )
print (df)
df.iloc[:,2:]=df.groupby( "组别" )[[ "语文","数学" ]].transform( lambda s:(s/s.sum()* 100 ).astype(str).str[:5]+ "%" )
print (df)
返回:
组别 | 成员 | 语文 | 数学 | |
---|---|---|---|---|
0 | A组 | 张三 | 17 | 18 |
1 | A组 | 李四 | 96 | 13 |
2 | B组 | 王麻子 | 46 | 13 |
3 | B组 | 许流子 | 58 | 33 |
4 | C组 | 郭鬼子 | 59 | 57 |
5 | C组 | 小曾 | 60 | 8 |
6 | C组 | 韦大宝 | 34 | 66 |
组别 | 成员 | 语文 | 数学 | |
---|---|---|---|---|
0 | A组 | 张三 | 15.04% | 58.06% |
1 | A组 | 李四 | 84.95% | 41.93% |
2 | B组 | 王麻子 | 44.23% | 28.26% |
3 | B组 | 许流子 | 55.76% | 71.73% |
4 | C组 | 郭鬼子 | 38.56% | 43.51% |
5 | C组 | 小曾 | 39.21% | 6.106% |
6 | C组 | 韦大宝 | 22.22% | 50.38% |